package yesCaptcha

import (
	"context"
	"gitee.com/kaylee595/gkaylee/kerr"
	"time"
)

// AwaitGetTaskResult 将以每3秒的间隔调用f，直到f返回的结果的状态为TaskStatusReady，或者ctx.Done()。
// 超时控制请使用context.WithTimeout。
func AwaitGetTaskResult[T any](ctx context.Context, f func() (*RespGetTaskResult[T], error)) (*RespGetTaskResult[T], error) {
	ticker := time.NewTicker(3 * time.Second)
	defer ticker.Stop()
	for {
		select {
		case <-ctx.Done():
			return nil, kerr.WrapTraceStack(ctx.Err())
		case <-ticker.C:
			ret, err := f()
			if err != nil {
				return nil, kerr.WrapTraceStack(err)
			}
			if ret.Status == TaskStatusReady {
				return ret, nil
			}
		}
	}
}
